package com.yc.cloud.common.websocket.service;

import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIONamespace;
import com.yc.cloud.common.websocket.core.SendMessageResult;
import com.yc.cloud.common.websocket.dto.RoomMessageDto;
import com.yc.cloud.common.websocket.dto.SingleMessageDto;
import com.yc.cloud.common.websocket.vo.PlayerVo;

import java.util.List;

public interface SocketService {

    /**
     * 获取在线用户列表
     *
     * @return 在线用户列表
     */
    List<PlayerVo> getOnLineUsers();

    /**
     * 广播消息
     *
     * @param socketIOClient 连接信息
     * @param event          消息事件类型
     * @param message        消息内容
     */
    void broadcastAllOnlineUsers(SocketIOClient socketIOClient, String event, Object... message);

    /**
     * 单播消息
     *
     * @param messageDto 消息内容
     * @return 是否发送成功
     */
    SendMessageResult<String> sendSingleMessage(SingleMessageDto messageDto);

    /**
     * 房间消息发送
     *
     * @param messageDto 消息内容
     * @return 是否发送成功
     */
    SendMessageResult<String> sendRoomMessage(RoomMessageDto messageDto);

    /**
     * 房间消息广播
     *
     * @param socketIONamespace 连接信息
     * @param room              房间号
     * @param event             消息事件类型
     * @param message           消息内容
     */
    void broadcastRoomMessageToUser(SocketIONamespace socketIONamespace, String room, String event, Object... message);


    /**
     * 查询房间内玩家信息列表
     *
     * @param client 连接信息
     * @param room   房间号
     * @return 玩家信息列表
     */
    List<PlayerVo> listByRoomId(SocketIOClient client, String room);

}
